//package com.gecba.system.service.impl;
//
//
//import com.gecba.modular.shiro.LoginServices;
//import com.gecba.modular.shiro.model.LoginUser;
//import com.gecba.system.dao.repository.*;
//import com.gecba.system.entity.*;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.redis.core.BoundValueOperations;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.stereotype.Service;
//
//import java.lang.reflect.InvocationTargetException;
//import java.util.List;
//import java.util.Objects;
//import java.util.Set;
//import java.util.concurrent.TimeUnit;
//import java.util.stream.Collectors;
//
///**
// * @author ChenBo
// * @className LoginServiceImpl
// * @date 2021/9/5
// */
//@Service
//public class LoginServiceImpl implements LoginServices {
//
//    @Autowired
//    private SysUserRepository userRepository;
//    @Autowired
//    private SysUserRoleRepository userRoleRepository;
//    @Autowired
//    private SysPermissionRepository permissionRepository;
//    @Autowired
//    private SysRoleRepository roleRepository;
//    @Autowired
//    private SysRolePermissionRepository rolePermissionRepository;
//    @Autowired
//    private RedisTemplate<String,Object> redisTemplate;
//
//    /**
//     * 通过用户名获取登陆用户
//     *
//     * @param username
//     * @author ChenBo
//     * @date 2021/9/5
//     */
//    @Override
//    public LoginUser getUserByName(String username){
//        LoginUser loginUser = new LoginUser();
//        SysUser user = userRepository.getByUsername(username);
//        loginUser.setPassword(user.getPassword());
//        loginUser.setUsername(user.getUsername());
//        loginUser.setStatus(user.getStatus());
//        return loginUser;
//    }
//
//    /**
//     * 通过用户名获取用户角色列表
//     *
//     * @param username
//     * @author ChenBo
//     * @date 2021/9/5
//     */
//    @Override
//    public Set<String> queryUserRoles(String username) {
//        SysUser user = userRepository.getByUsername(username);
//        List<SysUserRole> userRoles = userRoleRepository.findAllByUserId(user.getId());
//        List<Long> roleIds = userRoles.stream().filter(Objects::nonNull).map(SysUserRole::getRoleId).distinct().collect(Collectors.toList());
//        List<SysRole> roleList = roleRepository.findAllByIdIn(roleIds);
//        return roleList.stream().filter(Objects::nonNull).map(SysRole::getRoleCode).collect(Collectors.toSet());
//    }
//
//    /**
//     * 获取用户权限集合
//     *
//     * @param username
//     * @author ChenBo
//     * @date 2021/9/5
//     */
//    @Override
//    public Set<String> queryUserAuths(String username) {
//        SysUser user = userRepository.getByUsername(username);
//        List<SysUserRole> userRoles = userRoleRepository.findAllByUserId(user.getId());
//        List<Long> roleIds = userRoles.stream().filter(Objects::nonNull).map(SysUserRole::getRoleId).distinct().collect(Collectors.toList());
//        List<SysRolePermission> rolePermissions = rolePermissionRepository.findAllByRoleIdIn(roleIds);
//        List<Long> permissionIds = rolePermissions.stream().filter(Objects::nonNull).map(SysRolePermission::getPermissionId).distinct().collect(Collectors.toList());
//        List<SysPermission> permissionList = permissionRepository.findAllByIdIn(permissionIds);
//        return permissionList.stream().filter(Objects::nonNull).map(SysPermission::getPerms).collect(Collectors.toSet());
//    }
//
//    /**
//     * 获取缓存中的token
//     *
//     * @param key
//     * @author ChenBo
//     * @date 2021/9/5
//     */
//    @Override
//    public String getCacheToken(String key) {
//        BoundValueOperations<String, Object> stringBoundValueOperations = redisTemplate.boundValueOps(key);
//        Object o = stringBoundValueOperations.get();
//        return o.toString();
//    }
//
//    /**
//     * 刷新缓存中的token
//     *
//     * @param s
//     * @param token
//     * @param timeout
//     * @author ChenBo
//     * @date 2021/9/5
//     */
//    @Override
//    public void refreshCacheToken(String s, String token, long timeout) {
//        BoundValueOperations<String, Object> stringBoundValueOperations = redisTemplate.boundValueOps(s);
//        stringBoundValueOperations.set(token,timeout, TimeUnit.MINUTES);
//    }
//
//    /**
//     * 清除缓存中的token
//     *
//     * @param key
//     * @author ChenBo
//     * @date 2021/9/5
//     */
//    @Override
//    public void clearCacheToken(String key) {
//        Boolean delete = redisTemplate.delete(key);
//    }
//}
